{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "prescription-lighter",
   "metadata": {},
   "source": [
    "# 未知量子态的经典影子"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "loaded-consultation",
   "metadata": {},
   "source": [
    "<em> Copyright (c) 2021 Institute for Quantum Computing, Baidu Inc. All Rights Reserved. </em>"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "comfortable-guidance",
   "metadata": {},
   "source": [
    "## 概览"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cellular-armstrong",
   "metadata": {},
   "source": [
    "对于一个未知量子系统中的量子态 $\\rho$，如何去获取它所包含的信息是一个十分基础且重要的问题。本教程将讨论如何通过经典影子（classical shadow） 技术用经典的数据来描述一个未知的量子态，从而可以高效地对该量子态的诸多性质进行有效估计。在 NISQ （noisy intermediate-scale quantum）时代，这个技术可以很好地帮助我们用经典资源来交换量子资源，在将量子态的信息用经典数据描述后，可以用经典机器学习等方法来解决一些量子问题。并且利用这个方法，一些现有的变分量子算法（例如变分量子本征求解器（variational quantum eigensolver, VQE））实现中的量子电路运行次数等代价将减小，进而提升算法的速度。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "stainless-enemy",
   "metadata": {},
   "source": [
    "## 经典影子"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7020ecd5",
   "metadata": {},
   "source": [
    "经典影子的直觉来源于现实生活中的影子。我们用一束光垂直照向一个多面体，会在桌面上得到一个它的影子，旋转这个多面体，我们可以看到它不同形状的影子。在多次旋转后，这一系列的影子很自然地就反映了这个多面体的一些信息。类似地，在量子世界，如果我对一个量子态进行一次酉变换，然后进行一次测量，是否也能得到一个量子态的“影子”？经典影子的构建就和这个例子有相似之处，它的过程如下：\n",
    "\n",
    "首先，我们对 $n$ 个量子比特系统中的一个未知量子态 $\\rho$ 作用一个酉变换：$\\rho \\mapsto U \\rho U^{\\dagger}$ ，然后用计算基态去对每个量子位做测量。对于测量的结果这里用 $|\\hat{b}\\rangle$ 举例解释：对 $|\\hat{b}\\rangle$ 进行之前酉变换的逆变换得到 $U^{\\dagger}|\\hat{b}\\rangle\\langle\\hat{b}|U$。我们知道，测得的量子态 $|\\hat{b}\\rangle\\langle\\hat{b}|$在计算基态下期望为：\n",
    "\n",
    "$$\n",
    "\\mathbb{E}(|\\hat{b}\\rangle\\langle\\hat{b}|) =  \\sum_{b \\in \\{0,1\\}^{n}} \\operatorname{Pr}(|\\hat{b}\\rangle\\langle\\hat{b}| = |b\\rangle\\langle b|)\\cdot |b\\rangle \\langle b|=  \\sum_{b \\in \\{0,1\\}^{n}}\\langle b|U\\rho U^{\\dagger} |b\\rangle |b\\rangle \\langle b| \\tag{1}\n",
    "$$\n",
    "\n",
    "那么进行了逆操作后，$U^{\\dagger}|\\hat{b}\\rangle\\langle\\hat{b}|U$ 的期望就是 $\\sum_{b \\in \\{0,1\\}^{n}}\\langle b|U\\rho U^{\\dagger} |b\\rangle U^{\\dagger}|b\\rangle \\langle b|U$。在这个过程中，酉变换 $U$ 是从一个固定的集合中随机选取。当我们重复这一过程，对每次随机选取的 $U$ 也求平均时，可以得到：\n",
    "\n",
    "$$\n",
    "\\mathbb{E}_{U \\sim \\mathcal{U}\\left(n\\right)}(\\mathbb{E}(U^{\\dagger}|\\hat{b}\\rangle\\langle\\hat{b}|U))=\\sum_{b \\in \\{0,1\\}^{n}}\\mathbb{E}_{U \\sim \\mathcal{U}\\left(n\\right)}(\\langle b|U\\rho U^{\\dagger} |b\\rangle U^{\\dagger}|b\\rangle \\langle b|U) \\tag{2}\n",
    "$$ \n",
    "\n",
    "其中 $\\mathcal{U}\\left(n\\right)$ 是给定的一个作用在 $n$ 个量子比特上的酉变换集合。\n",
    "\n",
    "如果把这个期望的结果记作 $\\mathcal{M}(\\rho)$ ，则 $\\mathcal{M}$ 将会是一个从 $\\rho$ 到 $\\mathcal{M}(\\rho)$ 的映射。当 $\\mathcal{M}$ 线性可逆时 [1]，初始的量子态 $\\rho$ 就可以表达为：\n",
    "\n",
    "$$\n",
    "\\rho=\\mathcal{M}^{-1}(\\mathbb{E}_{U \\sim \\mathcal{U} \\left(n\\right)}(\\mathbb{E}(U^{\\dagger}|\\hat{b}\\rangle\\langle \\hat{b}|U))) = \\mathbb{E}_{U \\sim \\mathcal{U} \\left(n\\right)}(\\mathbb{E}(\\mathcal{M}^{-1} (U^{\\dagger}|\\hat{b}\\rangle\\langle \\hat{b}|U))) \\tag{3}\n",
    "$$\n",
    "\n",
    "有了 $\\mathcal{M}^{-1}$后，每一次采样 $U$ ，对 $U^{\\dagger}|\\hat{b}\\rangle\\langle\\hat{b}|U$ 作用 $\\mathcal{M}^{-1}$ 的结果 $\\hat{\\rho} = \\mathcal{M}^{-1}(U^{\\dagger}|\\hat{b}\\rangle\\langle\\hat{b}|U)$ 被我们称为 $\\rho$ 的一个快照（snapshot），重复这个过程 $N$ 次后得到 $N$ 个关于 $\\rho$ 的快照的集合：\n",
    "\n",
    "$$\n",
    "\\text{S}(\\rho ; N)=\\{\\hat{\\rho}_{1}=\\mathcal{M}^{-1}(U_{1}^{\\dagger}|\\hat{b}_{1}\\rangle\\langle\\hat{b}_{1}| U_{1}), \\ldots, \\hat{\\rho}_{N}=\\mathcal{M}^{-1}(U_{N}^{\\dagger}|\\hat{b}_{N}\\rangle\\langle\\hat{b}_{N}| U_{N})\\}   \\tag{4}\n",
    "$$\n",
    "\n",
    "我们把 $\\text{S}(\\rho; N)$ 就称为 $\\rho$ 的经典影子。值得一提的是，$\\mathcal{M}$ 具体是什么取决于我们选取的采样集合 $\\mathcal{U}$，例如当该集合选定为 Clifford 群时，我们有: \n",
    "\n",
    "$$\n",
    "\\mathcal{M}(\\rho)=\\mathbb{E}_{U \\sim \\operatorname{Cl} \\left(n\\right)}(\\mathbb{E}(U^{\\dagger}|\\hat{b}\\rangle\\langle \\hat{b}|U)) = \\frac{1}{2^{n}+1}\\rho+\\frac{1}{2^{n}+1}I  \\tag{5}\n",
    "$$\n",
    "（有关 $\\mathcal{M}$ 的表达式为何如（5）所示，读者可以参考 [1]）。于是：\n",
    "\n",
    "$$\n",
    "\\mathcal{M}^{-1}(\\frac{1}{2^{n}+1}\\rho+\\frac{1}{2^{n}+1}I)=\\rho \\Rightarrow \\mathcal{M}^{-1}(\\rho) = (2^{n}+1)\\rho-I  \\tag{6}\n",
    "$$\n",
    "\n",
    "构建了经典影子之后，它是如何帮助我们有效估计量子态的性质的呢？[1] 中指出，关于量子态 $\\rho$ 的一些线性性质就十分适合用经典影子技术来估计，例如 $\\rho$ 在某个可观测量 $\\mathcal{O}$ 下的期望：$o=\\operatorname{tr}\\left(\\mathcal{O} \\rho\\right)$，我们记 $\\hat{o}=\\operatorname{tr}\\left(\\mathcal{O} \\hat{\\rho}\\right)$，那么根据（3）式，就有 $\\mathbb{E}[\\hat{o}]=\\operatorname{tr}\\left(\\mathcal{O} \\rho\\right)$。与之相关的应用与实现，读者可以阅读另一篇教程：[基于经典影子的量子态性质估计](./ClassicalShadow_Application_CN.ipynb)。\n",
    "\n",
    "接下来，我们将在量桨中展示对一个随机生成的量子态 $\\rho$ 构建其经典影子的过程，帮助读者更好地理解与感受经典影子这个技术。其中选取 Clifford 群作为酉变换的采样集合。（具体有关 Clifford 群的性质以及如何从中均匀随机采样 Clifford 变换，感兴趣的读者可以参考 [1]、[3] 以及量桨中的 `Clifford` 类）"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "chinese-talent",
   "metadata": {},
   "source": [
    "## Paddle Quantum 代码实现"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "proved-hypothesis",
   "metadata": {},
   "source": [
    "首先，我们导入需要用到的包。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "freelance-steps",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import paddle\n",
    "import matplotlib.pyplot as plt\n",
    "from paddle_quantum.clifford import Clifford\n",
    "from paddle_quantum.state import vec_random\n",
    "from paddle_quantum.circuit import UAnsatz\n",
    "from paddle_quantum.utils import trace_distance"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "blessed-italian",
   "metadata": {},
   "source": [
    "接下来，我们随机生成量子态 $\\rho$。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "measured-boating",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置量子比特数目\n",
    "n_qubit = 2\n",
    "\n",
    "# 随机生成态矢量 phi\n",
    "phi_random = vec_random(n_qubit) \n",
    "# phi 的密度矩阵表示 rho\n",
    "rho_random = np.outer(phi_random, phi_random.conj())\n",
    "\n",
    "# 定义 |0> 和 |1>\n",
    "ket_0 = np.array([[1,0]]).T\n",
    "ket_1 = np.array([[0,1]]).T\n",
    "\n",
    "# 定义单位矩阵与 M 逆的系数\n",
    "I = np.identity(1<<n_qubit)\n",
    "coefficient = float(1<<n_qubit) + 1.0"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "painful-crossing",
   "metadata": {},
   "source": [
    "下一步，我们定义在测量时所需要的电路，并对我们记录测量结果做一些准备。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "dependent-abortion",
   "metadata": {},
   "outputs": [],
   "source": [
    "def measure_by_clifford(phi, num_qubit):\n",
    "    \"\"\"\n",
    "    对 phi 进行 Clifford 变换后，进行计算基态下的测量\n",
    "    \"\"\"\n",
    "    # 通过 Paddle Quantum 的 Clifford 类，来随机选取一个 Clifford operator，并生成其电路\n",
    "    clif = Clifford(num_qubit)\n",
    "    cir = clif.circuit()\n",
    "    \n",
    "    # 将量子态输入电路并运行\n",
    "    cir.run_state_vector(paddle.to_tensor(phi))\n",
    "    \n",
    "    # 对这一次采样后的运行结果进行一次测量\n",
    "    bitstring, = cir.measure(shots=1)\n",
    "    cl = cir.U.numpy()\n",
    "    \n",
    "    # 将测量的比特串结果记成态矢量形式\n",
    "    bhat = np.eye(1) \n",
    "    for i in bitstring:\n",
    "        if i == '0':\n",
    "            bhat = np.kron(bhat, ket_0)\n",
    "        elif i == '1':\n",
    "            bhat = np.kron(bhat, ket_1)\n",
    "    return bhat, cl"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "collect-fellow",
   "metadata": {},
   "source": [
    "### 进行酉变换的采样与经典影子的构建"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "authorized-welcome",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 选定采样次数\n",
    "S = 800"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "specified-balloon",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "estimator_rho = []\n",
    "tracedistance = []\n",
    "\n",
    "for sample in range(S):\n",
    "    \n",
    "    bhat, cl = measure_by_clifford(phi_random, n_qubit)\n",
    "    \n",
    "    # 根据推导的 M 逆来得到 shadow\n",
    "    hat_rho = coefficient * cl.conj().T @ np.kron(bhat, bhat.conj().T) @ cl - I\n",
    "    estimator_rho.append(hat_rho)\n",
    "    \n",
    "    # 对 shadow 求平均（因为在实际操作中，我们不能实现（3）式中的求期望，只能对得到的 classical shadow 求平均来近似）\n",
    "    ave_estimate = sum(estimator_rho) / len(estimator_rho)\n",
    "    \n",
    "    # 计算迹距离\n",
    "    tracedistance.append(trace_distance(rho_random, ave_estimate).real)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "boolean-overview",
   "metadata": {},
   "source": [
    "最后，我们输出用经典影子近似的 $\\rho$ 与真实 $\\rho$ 的矩阵表示，以及他们的迹距离。迹距离越接近 0 则说明用经典影子近似的 $\\rho$ 越接近真实的量子态。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "german-columbia",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "输出的量子态近似： [[-0.014+0.j    -0.036+0.022j  0.02 -0.047j -0.005-0.075j]\n",
      " [-0.036-0.022j  0.108+0.j    -0.152+0.075j  0.064+0.284j]\n",
      " [ 0.02 +0.047j -0.152-0.075j  0.158+0.j     0.114-0.334j]\n",
      " [-0.005+0.075j  0.064-0.284j  0.114+0.334j  0.748+0.j   ]]\n",
      "--------------------------------------------------\n",
      "初始输入的量子态： [[ 0.009+0.j    -0.027+0.022j  0.018-0.035j -0.054-0.053j]\n",
      " [-0.027-0.022j  0.141+0.j    -0.148+0.065j  0.037+0.305j]\n",
      " [ 0.018+0.035j -0.148-0.065j  0.184+0.j     0.102-0.335j]\n",
      " [-0.054+0.053j  0.037-0.305j  0.102+0.335j  0.666+0.j   ]]\n",
      "量子态近似与真实量子态的迹距离： 0.112\n"
     ]
    }
   ],
   "source": [
    "print('输出的量子态近似：', np.around(ave_estimate, decimals=3))\n",
    "print('-' * 50)\n",
    "print('初始输入的量子态：', np.around(rho_random, decimals=3))\n",
    "print('量子态近似与真实量子态的迹距离：', np.around(tracedistance[-1], decimals=3))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "independent-inspiration",
   "metadata": {},
   "source": [
    "可以看到，用经典影子近似的 $\\rho$ 与真实的量子态 $\\rho$ 在矩阵表示上已经十分接近，在 800 次的采样左右，两者的迹距离已经在 0.1 左右。下图展示了迹距离随着采样次数增多而下降的关系。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "superb-merchandise",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAJNCAYAAAB5m6IGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABJBElEQVR4nO3deXycVdn/8e+VpPtGF1pKC7Q8tGUpdAuliEDKWkCQTQVZHkCtIuiDCz9xxQUVUEFRARFRQKEgu+xFCKCytVBKoS0ti1AopXub7k3O74/rnmYaJs2knTN3kvm8X6+8Zuaee2bOmSzzzXXOfW4LIQgAAADFVZZ2AwAAAEoRIQwAACAFhDAAAIAUEMIAAABSQAgDAABIASEMAAAgBRVpN6C5+vTpEwYNGhT9dVatWqUuXbpEf52WqJT7LpV2/0u571Jp95++t46+d+vWTWeddZYGDhwoMyvIc4YQCvZcrU3MvocQNG/ePH39619fvHjx4j659ml1IWzQoEGaMmVK9Neprq5WVVVV9NdpiUq571Jp97+U+y6Vdv/pe1XazcjLW2+9pW7duql3794FCw8rV65Ut27dCvJcrU3MvocQtHjxYq1fv77RrMVwJAAArcTatWsLGsAQj5mpd+/eGjRoUKfG9iGEAQDQihDAWg8z2+L3ixAGAACQAkIYAADIy7Jly3T11Ven3QxVVVVtmh9+9NFHa9myZY3u++tf/1qrV68uUsuahxAGAADy0lgI27hxYwqtcQ8++KC22267Ru8nhAEAgFbvoosu0htvvKGRI0dq33331YEHHqjjjjtOe+65pyTp+OOP15gxY7TXXnvpuuuu2/S4hx9+WKNHj9aIESN06KGHSvKlQc455xyNHTtWo0aN0r333tvo665Zs0annHKK9thjD51wwglas2bNpvsGDRqkRYsWadWqVTrmmGM0YsQIDR8+XLfddpuuuuoqvf/++xo/frzGjx8vSTr33HNVWVmpvfbaSz/96U83e56LL75Yo0eP1t57761Zs2ZJkmpqanT22Wdr77331j777KM777xTkvToo49q//331+jRo/WpT31KNTU1zX4/W90SFQAAQNIFF0jTpm3z03SqrZXKy/3GyJHSr3/d6L6XXnqpZsyYoWnTpqm6ulrHHHOMZsyYocGDB0uSbrjhBvXq1Utr1qzRvvvuq5NOOkl1dXX6whe+oKeeekqDBw/WkiVLJEk//elPdcghh+iGG27QsmXLNHbsWB122GE512y75ppr1LlzZ82cOVPTp0/X6NGjP7LPww8/rB133FEPPPCAJGn58uXq0aOHrrjiCj3xxBPq06fPptft1auXamtrVVVVpenTp2ufffaRJPXp00cvvviirr76av3yl7/U9ddfr5/85Cfq0aOHXnnlFUnS0qVLtWjRIl1yySV67LHH1KVLF1122WW64oor9IMf/KBZ7z2VMAAAsFXGjh27KYBJ0lVXXaURI0Zo3LhxevfddzVnzhw9++yzOuiggzbt16tXL0leSbr00ks1cuRIVVVVae3atXrnnXdyvs5TTz2l008/XZK0zz77bApN2fbee29NnjxZ3/rWt/T000+rR48eOZ/r9ttv1+jRozVq1CjNnDlTr7322qb7TjzxREnSmDFj9Pbbb0uSHnvsMZ133nmb9unZs6eeffZZvfbaazrggAM0cuRI3Xjjjfrvf/+b79u2CZUwAABaoy1UrJpjzTYsWJpdtaqurtZjjz2mZ555Rp07d94UrBoTQtCdd96pYcOGbdVrNzR06FC9+OKLevDBB/W9731Phx566EcqU2+99ZZ++ctf6oUXXlDPnj112mmnbdbGDh06SJLKy8u3OM8thKDDDz9ct9566za1mUoYAADIS7du3bRy5cqc9y1fvlw9e/ZU586dNWvWLD377LOSpHHjxumpp57SW2+9JUmbhiOPPPJI/fa3v1UIQZL00ksvNfq6Bx10kG655RZJ0owZMzR9+vSP7PP++++rc+fOOv3003XhhRfqxRdf/EibV6xYoS5duqhHjx5asGCBJk+e3GSfDz/8cP3+97/fdHvp0qUaN26c/v3vf2vu3LmSfH7b66+/3uRzNUQlDAAA5KV379464IADNHz4cHXq1En9+vXbdN+ECRN07bXXao899tCwYcM0btw4SdL222+v6667TieeeKLq6urUt29fTZ48Wd///vd1wQUXaJ999lFdXZ0GDx6s+++/P+frnnvuuTr77LO1xx57aI899tCYMWM+ss8rr7yiCy+8UGVlZWrXrp2uueYaSdLEiRM1YcIE7bjjjnriiSc0atQo7b777tppp502tXFLvve97+m8887T8OHDVV5erosvvlgnnnii/vKXv+jUU0/VunXrJEmXXHKJhg4d2qz30zIJ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ST171t8mhAEAgG1ECMtXWdZbtXZteu0AAABtAiEsX7W19dephAEAgG1ECMtXdgijEgYAALYRISxf3/9+/XUqYQAAYBsRwvJ14YW+Wn7XroQwAACwzQhhzdWhA8ORAABgmxHCmqtDByphAABgmxHCmqtjRyphAABgmxHCmotKGAAAKABCWHN17CjdcYd0+eVptwQAALRihLDmatfOLydNSrcdAACgVSOENdeqVX750kvSokXptgUAALRahLDmWrmy/vrjj6fXDgAA0KoRwpprxYr66489ll47AABAq0YIa65MJWynnaT//CfdtgAAgFaLENZcmRN577OPtHChNGOG9Npr6bYJAAC0OoSwrTV0qLR0qbT33tJee6XdGgAA0MoQwppryBC/3GEHacOGdNsCAABaLUJYc/3nP9LLL0u9eqXdEgAA0IpVpN2AVqdPH/+aMyftlgAAgFaMStjWalgJY2gSAAA0AyFsa/XsufntpUvTaQcAAGiVCGFbq2ElbNmyVJoBAABaJ0LY1moYwqiEAQCAZiCEba2uXaXbb5f+/ne/TQgDAADNwNGR2+JTn5JmzfLrhDAAANAMVMK2VbdufllTk247AABAq0II21adO/vl6tXptgMAALQqhLBt1amTX65Zk247AABAq0II21YdOkhmVMIAAECzEMK2lZlXw6iEAQCAZiCEFUKnTlTCAABAsxDCCqFzZyphAACgWQhhhcBwJAAAaCZCWCF07sxwJAAAaBZCWCFQCQMAAM1ECCsEKmEAAKCZCGGFQCUMAAA0EyGsEFiiAgAANBMhrBBYogIAADQTIawQqIQBAIBmIoQVApUwAADQTISwQshMzA8h7ZYAAIBWghBWCJ07S7W10oYNabcEAAC0EoSwQujUyS8ZkgQAAHkihBVC585+yeR8AACQJ0JYITSshP3tb9Ivf5leewAAQItXkXYD2oRMCMtUwk4/3S+/+c102gMAAFo8KmGFkBmObHiEJBP1AQBAIwhhhZA9HDl/fv32//wnnfYAAIAWjxBWCNkT8x9+uH57VZW0cGEqTQIAAC0bIawQMpWwVaukr31N6tq1/r65c9NpEwAAaNEIYYWQqYS98Ya0YoV0ySX19731VjptAgAALRohrBAylbBXXvHLPff0qphECAMAADlFDWFmNsHMZpvZXDO7KMf9Z5nZQjOblnx9PmZ7oslUwqZP98vddvNt/foRwgAAQE7R1gkzs3JJv5d0uKR5kl4ws/tCCK812PW2EML5sdpRFJlK2PTpUrt20k47+e1Bg6T//je1ZgEAgJYrZiVsrKS5IYQ3QwjrJU2S9MmIr5eejh3rr594olSRZNu+fTk6EgAA5BQzhA2Q9G7W7XnJtoZOMrPpZnaHme0UsT3xmNVfv+qq+uvbb+8hrK5OWrpUuv9+3/fddz/6HAAAoKRYyF7hvZBPbHaypAkhhM8nt8+QtF/20KOZ9ZZUE0JYZ2ZflPSZEMIhOZ5roqSJktSvX78xkyZNitLmbDU1NeqavdREE6rGj5ckVT/++KZQtusf/qCdJ03SyiFD1G3OHNVVVKhs40a9fPnlWrrvvlHaXQjN7XtbU8r9L+W+S6Xdf/pemn2XSrv/xej7+PHjp4YQKnPeGUKI8iVpf0mPZN3+tqRvb2H/cknLm3reMWPGhGJ44oknmvcAP2HR5tt+8Yv67dlfDzxQsHbG0Oy+tzGl3P9S7nsIpd1/+l66Srn/xei7pCmhkUwTczjyBUlDzGywmbWXdIqk+7J3MLP+WTePkzQzYnviKi+XDjxw8219+tRfz75v6dLitAkAALRY0Y6ODCFsNLPzJT0ir3LdEEJ41cx+LE+F90n6qpkdJ2mjpCWSzorVnujWrfvotu2398t+/Xwl/aef9tuEMAAASl60ECZJIYQHJT3YYNsPsq5/Wz5M2fqVl390W/fufrnDDtIJJ0gLFnggW7KkuG0DAAAtDivmx/Q//+OX3/ymX/bt6+eVpBIGAEDJi1oJK3k77ijV1kplWVm3Z09CGAAAoBIWXVmDt5gQBgAARAgrPkIYAAAQIaz4+vSRFi1KuxUAACBlhLBiGzBAeu+93PfV1krf+Y40d25x2wQAAIqOifnFNmCAtGKFVFPjR0pmvPyyNHKkX//3v6Unn0yleQAAoDiohBXbgOQc5g2rYXfcUX/9ww+L1x4AAJAKQlixZULYvHmbb+/Uqf76G2/kXoEfAAC0GYSwYmusErZ4sdS+vXTzzdKGDdKcOcVvGwAAKBpCWLFtKYT16ycNH+63Z80qbrsAAEBREcKKrXNnXyssVwjr3VsaOtRvE8IAAGjTCGFpyLVMRSaEde4s7bKLNG1aKk0DAADFQQhLw4ABm0/Mv/NO6ZlnPIRJ0gknSHff7ctWzJ0rVVen0kwAABAPISwNDSthJ5/sl5lg9oMf+JDl174mnX66NH689M9/Fr+dAAAgGkJYGgYMkBYskDZu9NtDhvjloYf6Zc+e0gUXSE88IT33nG+75ZaiNxMAAMRDCEvDPvtIdXXS/ff77VWrvBp28cX1+3zsY5s/5sUXi9c+AAAQHSEsDccfLw0aJP3xj14N++ADaffdpfLy+n3GjKm/fuyx0owZ0tq1xW4pAACIhBCWhooKad99fUHWDz7wqlhm/bCMHj2kM8+UfvUr6YwzPKzNnJlOewEAQMERwtKy667Sf/8rvfuu3x448KP73Hij9PWve5VMkmbP9ssQpJtukl59VZo/X7r8cun554vTbgAAUBAVaTegZA0eLK1fL73wgt9uWAnLtttukpmHsLo66fe/l776VamqypewmDdP6tpVeu01aaeditJ8AACwbaiEpWXXXf3yr3/1yy2FsE6dfAHX2bOlgw/2ACb5+mHz5knXXy/V1Ei33x61yQAAoHAIYWkZMULq2NErYWZSnz5b3n/33aWpU6V//Wvz7fvuK33uc37eyVdfjddeAABQUISwtPTtK115pV8PQSpr4lsxbJj0+ut+ffhw6dxz/fq++9Zve+WVOG0FAAAFRwhL04EH5r/vsGH116ur6+d+ZU74PXy4NGWKdN55BWseAACIhxCWpuxg1ZTMEZKSn2PyK1+RfvQj6Ytf9G3nnOOXV18tHXCA9Pe/F66dAACg4Ahhaaqo8AVbG87zymWvvfzyoov8smtXP8dkx45+e599/CTgkvSf//h5J9etK3ybAQBAQbBERdo+//n89uvb14+E3HHHxvcZN873ee016YgjpD//WfrSlxrfPwS/NPPrdXWbr9oPAACioRLWmgwY4IGpqX0OO0waO9aHJrPdeKN02mkeuJ580oPdxz8uTZ/ulbOddqo/qTgAAIiKSlhbZOZB7LLLfEX+gQOladOks87y+485Rrr0UmnRIv8aMaL+sffe63POAABAVFTC2qrhw6XaWmnnnX35i9Gj6+877TRfzuJvf/MFYEeNqr/v/vs3f55775Vefrn+9saN9adPAgAAW40Q1lYNH15/vW9f6aqrpJtvlt580ytfY8dKp5ziS1w895z09NPS0Udvfg7K5cul44+XRo702w895Cv27767HxSQ7a23fB7ahAl+KiUAALBFDEe2VcOGST16+AnAv/Y1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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 打印出量子态的近似与初始量子态的迹距离结果图\n",
    "fig,ax = plt.subplots(figsize=(10, 10))\n",
    "plt.xlabel('number of samples')\n",
    "plt.ylabel('trace distance')\n",
    "j = range(len(tracedistance)) \n",
    "plt.plot(j, tracedistance, 'r', label=\"trace_distance\")\n",
    "\"\"\"open the grid\"\"\"\n",
    "plt.grid(True)\n",
    "plt.legend(bbox_to_anchor=(1.0, 1), loc=1, borderaxespad=0.)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "graphic-oklahoma",
   "metadata": {},
   "source": [
    "## 总结"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "unavailable-health",
   "metadata": {},
   "source": [
    "本教程介绍了经典影子的基本原理与一些理论知识。在展示的案例中，我们基于量桨对一个随机生成的 2 个量子比特量子态构建了其经典影子。直观地感受了经典影子可以对一个未知的量子态做较好的近似。事实上，[2] 中指出在许多场景下，要求对量子系统进行完整的经典描述可能是多余的。相反，准确地估计量子系统的某些特性通常就足够了，这也是经典影子真正的重要性所在。在经典影子应用的教程（[基于经典影子的量子态性质估计](./ClassicalShadow_Application_CN.ipynb)）中，将具体介绍经典影子的应用以及如何在量桨中使用 shadow 功能。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "adopted-taste",
   "metadata": {},
   "source": [
    "## 参考文献"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "described-swiss",
   "metadata": {},
   "source": [
    "[1] Huang, Hsin-Yuan, Richard Kueng, and John Preskill. \"Predicting many properties of a quantum system from very few measurements.\" [Nature Physics 16.10 (2020): 1050-1057.](https://authors.library.caltech.edu/102787/1/2002.08953.pdf)\n",
    "\n",
    "[2] Aaronson, Scott. \"Shadow tomography of quantum states.\" [SIAM Journal on Computing 49.5 (2019): STOC18-368.](https://dl.acm.org/doi/abs/10.1145/3188745.3188802)  \n",
    "\n",
    "[3] Bravyi, Sergey, and Dmitri Maslov. \"Hadamard-free circuits expose the structure of the Clifford group.\" [IEEE Transactions on Information Theory 67.7 (2021): 4546-4563.](https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9435351)"
   ]
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "3b61f83e8397e1c9fcea57a3d9915794102e67724879b24295f8014f41a14d85"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
